home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 2 / CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso / magazine / amiga_e / eformat.e < prev    next >
Text File  |  1993-07-21  |  5KB  |  206 lines

  1. /* Formatted with Eformat v1.4 from file "df1:eformat.e" */
  2. /*
  3. Eformat v1.4 - Formats E source code into a format I like.
  4.  
  5. Thanks to whoever wrote the stack code...
  6.  
  7. */
  8. MODULE 'dos/dos'
  9.  
  10. OPT OSVERSION=37
  11.  
  12. ENUM NOERROR,ERR_NOFILE,ERR_COFILE,ERR_NOMEM,ERR_UNKNOWN
  13.  
  14. OBJECT st_stackType
  15.     top, count
  16. ENDOBJECT
  17.  
  18. DEF rdargs,srcfh
  19.  
  20. PROC main()
  21.     DEF myarg[2]:LIST,raw[300]:STRING,trim[300]:STRING,fw[30]:STRING,
  22.     sel_level=0,sel_tablevel=0,case_tablevel,sstr,tl,key,a,
  23.     addtab,us:st_stackType
  24.     tl:=0
  25.     
  26.     IF (rdargs:=ReadArgs('Source/A',myarg,0))>0
  27.         IF FileLength(myarg[0])>0
  28.             srcfh:=Open(myarg[0],MODE_OLDFILE) ; st_init(us)
  29.             IF srcfh>0
  30.                 WriteF('/* Formatted with Eformat v1.4 from file "\s" */\n',myarg[0])
  31.                 ReadStr(srcfh,raw)
  32.                 REPEAT
  33.                     IF CtrlC()
  34.                         WriteF('\n/* User Aborted Formatting! */\n')
  35.                         getout(0)
  36.                     ENDIF
  37.                     sstr:=TrimStr(raw)
  38.                     /* Copy trimmed string to work buffer... ('trim') */
  39.                     StrCopy(trim,sstr,ALL)
  40.                     /* Search for first word in line and isolate it... */
  41.                     a:=InStr(trim,' ',0)
  42.                     IF a>-1
  43.                         StrCopy(fw,trim,a)
  44.                     ELSE
  45.                         StrCopy(fw,trim,ALL)
  46.                     ENDIF
  47.                     /* Pad it in case it's less than 4 characters... */
  48.                     StrAdd(fw,'   ',ALL)
  49.                     key:=Long(fw) ; addtab:=FALSE
  50.                     SELECT key
  51.                         CASE "PROC"
  52.                             IF findnonquoted(trim,' RETURN',0)=-1
  53.                                 addtab:=TRUE
  54.                             ENDIF
  55.                             tl:=0
  56.                         CASE "ENDP"
  57.                             tl:=0
  58.                         CASE "IF  "
  59.                             IF findnonquoted(trim,' THEN',0)=-1
  60.                                 addtab:=TRUE
  61.                             ENDIF
  62.                         CASE "ELSE"
  63.                             IF findnonquoted(trim,' THEN',0)=-1
  64.                                 tl-- ; addtab:=TRUE
  65.                             ENDIF
  66.                         CASE "ENDI"
  67.                             tl--
  68.                         CASE "SELE"
  69.                             sel_level++ ; sel_tablevel:=tl ; case_tablevel:=tl+1
  70.                             st_push(us,sel_tablevel) ; addtab:=TRUE
  71.                         CASE "ENDS"
  72.                             IF (sel_level--)>-1
  73.                                 sel_tablevel:=st_pop(us)
  74.                                 tl:=sel_tablevel ; case_tablevel:=tl-1
  75.                             ENDIF
  76.                         CASE "CASE"
  77.                             tl:=case_tablevel ; addtab:=TRUE
  78.                         CASE "DEFA"
  79.                             tl:=case_tablevel ; addtab:=TRUE
  80.                         CASE "REPE"
  81.                             IF findnonquoted(trim,' UNTIL',0)=-1
  82.                                 addtab:=TRUE
  83.                             ENDIF
  84.                         CASE "UNTI"
  85.                             tl--
  86.                         CASE "LOOP"
  87.                             IF findnonquoted(trim,' ENDLOOP',0)=-1
  88.                                 addtab:=TRUE
  89.                             ENDIF
  90.                         CASE "ENDL"
  91.                             tl--
  92.                         CASE "FOR "
  93.                             IF findnonquoted(trim,' DO',0)=-1 AND findnonquoted(trim,'ENDFOR',0)=-1
  94.                                 addtab:=TRUE
  95.                             ENDIF
  96.                         CASE "ENDF"
  97.                             tl--
  98.                         CASE "WHIL"
  99.                             IF findnonquoted(trim,' DO',0)=-1 AND findnonquoted(trim,'ENDWHILE',0)=-1
  100.                                 addtab:=TRUE
  101.                             ENDIF
  102.                         CASE "ENDW"
  103.                             tl--
  104.                         CASE "EXCE"
  105.                             tl:=0 ; addtab:=TRUE
  106.                         CASE "OBJE"
  107.                             addtab:=TRUE
  108.                         CASE "ENDO"
  109.                             tl--
  110.                     ENDSELECT
  111.                     IF tl>0
  112.                         FOR a:=1 TO tl
  113.                             WriteF('\c',9)
  114.                         ENDFOR
  115.                     ELSE
  116.                         IF tl<0
  117.                             WriteF('/* Conversion Error! Tab level less than 0! */\n')
  118.                             tl:=0
  119.                         ENDIF
  120.                     ENDIF
  121.                     /* Addtab adds a tab AFTER the current line is displayed. */
  122.                     IF addtab=TRUE
  123.                         tl++
  124.                     ENDIF
  125.                     WriteF('\s\n',trim)
  126.                 UNTIL ReadStr(srcfh,raw)=-1
  127.                 getout(0)
  128.             ELSE
  129.                 error(ERR_COFILE,0)
  130.             ENDIF
  131.         ELSE
  132.             error(ERR_NOFILE,0)
  133.         ENDIF
  134.     ELSE
  135.         WriteF('Incorrect argument format.\n')
  136.     ENDIF
  137.     getout(0)
  138. ENDPROC
  139.  
  140. CHAR '$VER: Eformat Version 1.4 (c) 1994 Jason Maskell',0
  141.  
  142. /*
  143. Quoted Keyword kludge for formatting stuff with, you guessed it,
  144. quoted keywords. Like this source, for example.
  145. */
  146. PROC findnonquoted(source:PTR TO CHAR,target,offs)
  147.     DEF a
  148.     IF (a:=InStr(source,target,offs))>-1
  149.         IF source[a+StrLen(target)]="'"
  150.             a:=-1
  151.         ENDIF
  152.     ENDIF
  153. ENDPROC a
  154.  
  155. PROC st_init (theStack : PTR TO st_stackType)
  156.     /* Simply declare the stack variable as st_stackType.   The status of the */
  157.     /* stack can be checked by testing stackname.count.                       */
  158.     theStack.top := NIL
  159.     theStack.count := 0
  160. ENDPROC
  161.  
  162. PROC st_push (theStack : PTR TO st_stackType, addr)
  163.     DEF newList, tempList
  164.     newList := List (1)
  165.     ListCopy (newList, [addr], ALL)
  166.     tempList := Link (newList, theStack.top)
  167.     theStack.top := tempList
  168.     theStack.count := theStack.count + 1
  169. ENDPROC
  170.  
  171. PROC st_pop (theStack : PTR TO st_stackType)
  172.     DEF list, addr = NIL
  173.     IF theStack.count
  174.         list := theStack.top
  175.         addr := ^list
  176.         theStack.top := Next (list)
  177.         theStack.count := theStack.count - 1
  178.     ENDIF
  179. ENDPROC  addr
  180.  
  181. PROC error(err,str)
  182.     DEF work[256]:STRING
  183.     SELECT err
  184.         CASE ERR_NOFILE
  185.             StringF(work,'Couldn''t find source E source file.\n')
  186.         CASE ERR_COFILE
  187.             StringF(work,'Couldn''t open file. DOS Error \d\n',IoErr())
  188.         CASE ERR_NOMEM
  189.             StringF(work,'Unable to allocate memory.\n')
  190.         CASE ERR_UNKNOWN
  191.             StringF(work,'Unknown error code! \d',err)
  192.     ENDSELECT
  193.     request('Eformat Error',work,'Ok',0)
  194.     getout(11)
  195. ENDPROC
  196. PROC request(title,body,gadgets,args)
  197. ENDPROC EasyRequestArgs(0,[20,0,title,body,gadgets],0,args)
  198.  
  199. PROC getout(retcode)
  200.     IF srcfh
  201.         Close(srcfh)
  202.     ENDIF
  203.     FreeArgs(rdargs)
  204.     CleanUp(retcode)
  205. ENDPROC
  206.